class Investimento < ActiveRecord::Base

  # Scopes
  named_scope :futuros,    :conditions => {:documento_fiscal_id => nil}
  named_scope :realizados, :conditions => "documento_fiscal_id IS NOT NULL" # postgres compatibility

  # Attributes
  belongs_to :caracterizacao
  validates_presence_of :caracterizacao
  attr_readonly :caracterizacao_id

  belongs_to :documento_fiscal
  accepts_nested_attributes_for :documento_fiscal

  belongs_to :unidade_medida

  # Validation
  validates_presence_of :descricao, :unidade_medida
  validates_numericality_of :quantidade, :greater_than => 0, :only_integer => true
  validates_numericality_of :valor, :greater_than => 0

  before_validation :documento_fiscal_da_caracterizacao

  default_scope :order => :created_at

  def documento_fiscal_da_caracterizacao
    return unless documento_fiscal_id
    unless caracterizacao.documentos_fiscais.exists?(documento_fiscal_id)
      errors.add_to_base "Documento Fiscal selecionado é inválido"
      false
    end
  end

  # Callbacks
  with_options :if => :documento_fiscal_id_was do |i|
    i.after_destroy :remover_documento_fiscal_sem_investimentos
    i.after_update  :verificar_documento_fiscal_sem_investimentos
  end

  def remover_documento_fiscal_sem_investimentos(documento_fiscal_antigo = documento_fiscal)
    documento_fiscal_antigo.destroy if documento_fiscal_antigo.investimentos.empty?
  end

  def verificar_documento_fiscal_sem_investimentos
    if documento_fiscal_id_changed?
      documento_fiscal_antigo = DocumentoFiscal.find(documento_fiscal_id_was)
      remover_documento_fiscal_sem_investimentos(documento_fiscal_antigo)
    end
  end

end
